//
// @Author: zhengqi Wu
// @Description:
// @Version: 1.0.0
// @Date: 2021/3/3 4:02 下午
// @Copyright: MIN-Group；国家重大科技基础设施——未来网络北大实验室；深圳市信息论与未来网络重点实验室
//

/**
 * IEncodingAble接口定义
 * 由于js是面向过程语言，因此采用Interface Pattern 代替实际的接口定义
 * 参考资料：https://geedew.com/basic-interfaces-in-nodejs/
 * 实现接口方式: class XXX extends IEncodingAble
 */
class IEncodingAble{
    constructor() {
        //
        // 线速编码，将一个包编码成网络可传输的格式
        //
        // @Description:
        // 	1. 可以使用 Encoder.getBuffer() 获取编码的结果
        // @param encoder
        //
        if(!this.wireEncode) {
            throw new Error("IEncodingAble's must support wireEncode!");
        }
        //
        // 线速解码，将一个TLV解码成一个网络包
        //
        // @Description:
        // @param block
        //
        if(!this.wireDecode){
            throw new Error("IEncodingAble's must support wireDecode!");
        }
    }
}

module.exports = IEncodingAble